using System;
using System.IO;
using System.Configuration;
using AccountingApp;
using AccountingApp.Models;

namespace AccountingApp.Test
{
    class TestDatabase
    {
        static void Main(string[] args)
        {
            Console.WriteLine("测试数据库操作...");

            try
            {
                // 设置测试数据库文件名
                string testDbFile = "test_accounting.db";

                // 删除现有数据库文件（如果存在）
                if (File.Exists(testDbFile))
                {
                    File.Delete(testDbFile);
                    Console.WriteLine("删除现有测试数据库文件");
                }

                // 临时修改连接字符串用于测试
                Console.WriteLine("使用测试数据库连接字符串...");
                
                // 初始化数据库
                TestDatabaseHelper.InitializeDatabase();
                Console.WriteLine("✓ 数据库初始化成功");

                // 测试用户注册
                var testUser = new User("testuser", "testpass");
                bool registerResult = TestDatabaseHelper.RegisterUser(testUser);
                Console.WriteLine($"✓ 用户注册: {(registerResult ? "成功" : "失败")}");

                // 测试用户登录
                var loginUser = TestDatabaseHelper.LoginUser("testuser", "testpass");
                if (loginUser != null)
                {
                    Console.WriteLine($"✓ 用户登录成功: {loginUser.Username}");
                    
                    // 测试添加记账记录
                    var record1 = new AccountRecord(loginUser.Id, 1000m, "收入", "工资", "月薪");
                    var record2 = new AccountRecord(loginUser.Id, 50m, "支出", "餐饮", "午餐");
                    
                    bool addResult1 = TestDatabaseHelper.AddAccountRecord(record1);
                    bool addResult2 = TestDatabaseHelper.AddAccountRecord(record2);

                    Console.WriteLine($"✓ 添加收入记录: {(addResult1 ? "成功" : "失败")}");
                    Console.WriteLine($"✓ 添加支出记录: {(addResult2 ? "成功" : "失败")}");

                    // 测试获取记录
                    var records = TestDatabaseHelper.GetAccountRecords(loginUser.Id);
                    Console.WriteLine($"✓ 获取记录数量: {records.Count}");

                    // 测试余额计算
                    var balance = TestDatabaseHelper.GetBalance(loginUser.Id);
                    Console.WriteLine($"✓ 当前余额: ￥{balance}");
                    
                    Console.WriteLine("\n所有测试通过！数据库操作正常。");
                }
                else
                {
                    Console.WriteLine("✗ 用户登录失败");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"✗ 测试失败: {ex.Message}");
                Console.WriteLine($"详细错误: {ex}");
            }
            
            Console.WriteLine("\n按任意键退出...");
            Console.ReadKey();
        }
    }
}
